<?
class Rule_Captcha extends Rule
{
	var $max_tries=10;   // сколько неудачных попыток до бана по ip
	
	public $error_message="Вы ввели неверное число";
	
	function Check($hash)
	{
		if(!$hash[$this->name]) return false;
		
		// баг с сессией
		if(!$_SESSION['captcha_keystring']) return true;
		
		$ip = ip2long($_SERVER['REMOTE_ADDR']);
		$row = DB::singleRow("select count(*) as cnt,max(dt) as maxdt from cap_try where ip=$ip and dt>".(time()-3600) );
		
		if( $row['cnt'] >= $this->max_tries)
		{
			if(time()-$row['dt']>3000)	
			{
				$this->error_message = 'Больше '.$this->max_tries.' неудачных попыток. Попробуйте снова через час';
			}
			else 
			{
				$this->error_message = 'Больше '.$this->max_tries.' неудачных попыток. Попробуйте снова через '.ceil((time()-$row['dt'])/60).' мин.';
			}
			return false;
		}
		
		if( $hash[$this->name] === $_SESSION['captcha_keystring'] )
		{
			return true;
		}
		
		DB::insert("cap_try",Array("ip"=>$ip,"dt"=>time(), "cap_right"=>$_SESSION['captcha_keystring'], "cap_wrong"=>$hash[$this->name] ));
		return false;
	}
}
